/**
 * @file 协议栈接口文件
 *
 * 协议栈接口文件
 *
 * @author wq1977@gmail.com
 */

#ifndef __OSIP_PROCESS_H__
#define __OSIP_PROCESS_H__

#include "wx/wx.h"
#include <osip2/osip.h>
#include <osip2/osip_dialog.h>

#ifdef __WIN32__
    #include <winsock2.h>
    typedef int socklen_t;
#else
    #include <sys/time.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    typedef int SOCKET;
#endif

//Commit to diable the osip trace
//#define ENABLE_TRACE

#define MAX_EX_SOCK_NUM  MAX_TERM_NUM // ((FD_SETSIZE-1)>MAX_TERM_NUM?MAX_TERM_NUM:(FD_SETSIZE-1))
bool InitOsipSendSock(void);
void SetCallBacks(osip_t *osip);

/**
 * @defgroup NetwordRecvModule 网络接收模块

这个模块所作的事情是循环的从网络接口中接收Sip文本消息,调用协议栈的解码函数将Sip请求转换成结构,再根据
结构中具体的某个域的值决定这个Sip消息的目的用户(终端编号),然后根据消息类型的不同,将收到的Sip事件放入
协议栈的状态机中或者调用应用程序的DisPatchEvt方法将其通知给某个特定的终端实例.

\sa OsipRecvThread
\sa MyApp::DisPatchEvt(int, SttEvt*)

*/

class OsipRecvThread: public wxThread
{
public:
    OsipRecvThread(osip_t *p):wxThread(wxTHREAD_JOINABLE){osip=p; Create(); Run();};
protected:
    osip_t *osip;
    virtual void *Entry();
};


#endif

